const crypto = require('crypto')
const EXPIRATION_DAYS = 30
/**
 * 生成授权码
 * @param {string} machineId - 机器标识，用于绑定设备
 * @param {number} days - 有效期天数，默认为30天
 * @returns {string} 生成的授权码
 */
function generateAuthCode(code, machineId = '', days = EXPIRATION_DAYS) {
  try {
    // 生成当前时间戳和过期时间戳
    const now = Math.floor(Date.now() / 1000)
    const expiry = now + days * 24 * 60 * 60

    // 创建随机盐值以增加安全性
    const salt = crypto.randomBytes(8).toString('hex')

    // 构建数据部分
    const data = {
      machineId: machineId.substring(0, 32), // 限制机器ID长度
      iat: now,
      exp: expiry,
      salt: salt,
    }

    // 将数据转换为JSON字符串
    const dataString = JSON.stringify(data)

    // 创建HMAC签名
    const hmac = crypto.createHmac('sha256', code)
    const signature = hmac.update(dataString).digest('hex')

    // 组合数据和签名
    const combined = `${dataString}:${signature}`

    // 进行Base64编码并替换特殊字符
    const authCode = Buffer.from(combined)
      .toString('base64')
      .replace(/\+/g, '-')
      .replace(/\//g, '_')
      .replace(/=+$/, '')

    return authCode
  } catch (error) {
    console.error('生成授权码失败:', error)
    throw error
  }
}

module.exports = {
  generateAuthCode,
}
